/**
 * 
 */
package mblog.core.persist.dao;

import java.util.Collection;
import java.util.List;

import mblog.core.pojos.Tag;
import mtons.modules.persist.Dao;
import mtons.modules.pojos.Page;

import com.faxsun.core.persist.entity.TagPO;
import com.faxsun.core.pojos.enums.TagType;

/**
 * @author langhsu
 * @author songdragon
 *
 */
public interface TagDao extends Dao<TagPO> {
	TagPO getByName(String name);
	List<TagPO> tops(int maxResutls);
    List<TagPO> findByIds(Collection<Long> ids);
	
	/**
	 * 
	 * @param maxResults
	 * @return
	 * @author songdragon
	 */
	List<TagPO> findForRecommendProductsTag(int maxResults);
	
	/**
	 * 读取指定类型的Tag
	 * @param page
	 * @param type
	 * @return
	 * @author songdragon
	 */
	List<TagPO> list(Page page, TagType type);

	/**
	 * 查询包含指定tagName的标签
	 * @param tagName
	 * @param page
	 * @return
	 */
	List<TagPO> queryTag(String tagName,Page page);
	
	/**
	 * 根据指定的Category Tags读取属于其的Product Tag
	 * @param page
	 * @param categoryTags
	 * @return
	 */
	List<TagPO> listTagByCategory(Page page, List<TagPO> categoryTags);
	
	/**
	 * 列出导航Tag
	 * @return
	 */
	List<TagPO> listNavTags();
	
	/**
	 * 找出指定的Category下面的top maxResult产品
	 * @param categoryTag 分类标签
	 * @param maxResult top n
	 * @return
	 */
	List<TagPO> findRecommendProductsForCategory(Tag categoryTag, int maxResult);
	
	/**
	 * 查找给定的资讯产品Id对应的产品tag
	 * @param id 资讯产品Id
	 * @return 对应的产品tag，如果没有找到，则返回null
	 */
	TagPO findByProductRefId(Long id);
}
